iT邦幫忙

2023 iThome 鐵人賽

DAY 14
0
Software Development

Laravel專案練習-寶可夢管理系統系列 第 14

Day14 寶可夢專案-部署練習-https設定-https基本介紹

  • 分享至 

  • xImage
  •  

什麼是HTTPS?

HTTPS是一個用於安全通信的網路協定,它能夠保護網站與用戶間的通信不被第三方窺探、篡改或冒充。

他其實就是在原本http應用層協定上再多加一層TLS。

TLS/SSL握手過程:

  • 這裡分享一下他握手的過程,主要出於個人好奇,其實安裝過程不一定需要知道這些。
  • 恕我這裡沒有放上圖片,因為我自己去看了覺得其實整個過程細節是很複雜的,圖片都會有很多專有名詞,其實不會比較好懂(個人覺得),我這裡只是想瞭解一下大概流程:
  1. HTTP請求與重定向:

    • 瀏覽器首先會對服務器發送一個普通的HTTP請求。
    • 如果服務器配置了HTTPS,則會發送一個HTTP 301或302重定向響應,指示客戶端使用HTTPS重新發送請求。
  2. 客戶端與服務器協商:

    • 客戶端接收到重新發送的請求後,即發送一個「ClientHello」消息,消息中包含了客戶端支持的加密方法、支持的SSL/TLS的版本等信息。
    • 服務器收到後,會選擇一個客戶端也支持的加密方法和SSL/TLS的版本,回送一個「ServerHello」消息。
    • 此階段就是先互先確定要使用的加密版本訊息。
  3. 服務器的數位證書:

    • 數位證書

      • 他是一個用來確認網站身份的一個憑證。
      • 主要他可以防止一種情況,如果今天你訪問的是某個網站但有個某有心人士自己去產生鑰匙要和你連線,你以為你是和原本的網站連線結果不是。
      • 他主要的是確認公鑰的身份,因為通常在一開始server會傳公鑰給client(非對稱式加密)。
    • 如何確保證書的可靠性

      以確保證書是由一個受信任的證書頒發機構(CA)簽署的。

    • 前面的訊息確認完之後,服務器會向客戶端發送其擁有的公開證書。

    • 證書中包含了服務器的公開金鑰和一些證書的附加信息。客戶端會檢查證書的合法性。

  4. 客戶端回應:
    客戶端生成一串隨機數字作為對話密鑰(session key),用服務器的公開金鑰加密後發送給服務器。服務器用自己的私人金鑰解密獲得這串密鑰,雙方即建立起了一個共享的密鑰。

    為何不直接用RSA加密傳輸就好?

    這裡是我當初自己在看覺得很厲害的地方,先說一下對稱式加密及非對稱式加密(加密原理的部分我還沒有特別研究:

    • 對稱式

      • 簡單來說就是加密解密都用同一把鑰匙

      • 優點

        加密解密的速度快

      • 缺點

        傳送鑰匙給對方過程危險,而且有心人士拿到就可以解密。

    • 非對稱式

      • 加密跟解密不同鑰匙

      • 優點

        相較於對稱式安全一些,畢竟不用傳解密用的鑰匙。

      • 缺點

        加密解密的速度較慢(原理還沒研究抱歉)

    • 合體

      • 那今天我要選擇用哪種方式傳輸?小朋友才…..
        講簡單點就是截長補短,用非對稱式加密的方式傳送對稱式加密的鑰匙。
      • 這樣既可以達到鑰匙傳輸一定程度的安全性(透過公鑰傳輸對稱式加密鑰匙),
      • 當對方拿到鑰匙後又可以達到加密解密相對於非對稱式加密快速。

      magic!

    • 實際步驟

      1. 生成Premaster Secret

      客戶端生成一個隨機的**premaster secret**。

      2. 加密與傳遞Premaster Secret

      客戶端使用服務器的公鑰加密**premaster secret**,然後將其發送到服務器。

      3. 服務器解密Premaster Secret

      服務器使用它的私鑰來解密收到的**premaster secret**。

      4. 生成Master Secret

      客戶端和服務器都使用從**premaster secret衍生出的master secret**,通過一個安全的密鑰導出函數,生成會話中用到的各種密鑰,例如對稱密鑰、MAC密鑰等。

      5. 生成Session Key

      從**master secret中派生出session keys**,用於對稱加密和解密以及生成/驗證消息摘要。

      前向安全性(Forward Secrecy)

      • 就是我今天每一個session用的加密鑰匙是不同的。所以今天你竊取到了其中一把 你也沒辦法對之前的session做解密。
      • 每一個session都會由master key根據雙方約定好的公開數去產生session key去加密。
  5. 建立安全通道:
    在建立了對稱式加密的鑰匙後,雙方會用前面得到的共享密鑰來建立一個安全的通信通道,之後的所有通信都會在這個加密通道中進行。

結語


上一篇
Day13 寶可夢專案-部署練習-虛擬伺服器軟體安裝-mysql設定
下一篇
Day15:寶可夢專案-虛擬伺服器軟體安裝-https設定-安裝步驟
系列文
Laravel專案練習-寶可夢管理系統30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言